'''
题目：
10 个房间内放着数量随机的金币，每个房间只能进入一次，并只能在一个房间中拿金币。
一个人采取如下策略：前四个房间只看不拿。随后的房间只要看到比前四个房间都多的金
币数，就拿。否则就拿最后一个房间的金币。编程计算这种策略拿到最多金币的概率。

思路：
需要生成 10 个随机数来模拟 10 个房间内金币的数量。
需要多次模拟，记录模拟次数 m, 拿到最多金币次数 n, 求出拿到最多金币的概率 n/m。
模拟次数越多越接近真实值。
'''

import random


def getMaxNum(n):  # n rooms
    if n<1: return  # 参数不合法
    a = [None] * n
    # 随机生成 n 个房间里金币的个数
    for i in range(n):
        a[i] = random.uniform(1, n)  # 生成 1~n 的随机数
    # 找出前四个房间中最多的金币个数
    max4 = max(a[:4])
    for i in range(4, n):
        if a[i] > max4:
            return True
    return False


if __name__ == "__main__":
    monitorCount = 10000
    success = 0
    for i in range(monitorCount):
        if getMaxNum(10):
            success += 1
    print("Probability: {:.4f}".format(success/monitorCount))
